﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using BUS;
using DAO;
using DTO;
namespace baitaptuan5
{
    public partial class LapHoaDon : Form
    {
        public LapHoaDon(HoaDonDTO hd)
        {
            InitializeComponent();

            hdbus = new HoaDonBUS();
            hddto = hd;

            sachbus = new SachBUS();
            sachdto = new SachDTO();
            dtSach = sachbus.laybang();

            khbus = new KhachHangBUS();
            khdto = new KhachHangDTO();

            ctbus = new ChiTietHoaDonBUS();
            ctdto = new ChiTietHoaDonDTO();

            phieuthuBUS = new PhieuThuBUS();

            tsBUS = new ThamSoBUS();
            thamsotdo = new ThamSoDTO();
            dtTS = tsBUS.LayTable();


            dtHK = new DataTable();
            dtHK = khbus.LayTable();
            dtHD = new DataTable();
            dtCT = new DataTable();

            if (hddto.MaHoaDon != 0)
            {
                dateTimePicker1.Text = hddto.NgayLap.ToString();

                string filterExpression = "";

                filterExpression = "MaKhachHang=" + hddto.MaKhachHang + "";

                DataRow[] rows = dtHK.Select(filterExpression);
                button2.Visible = false;
                textBox1.Text = rows[0].ItemArray[1].ToString();
                rbthem.Visible = false;
                rbthem.Checked = false;
                rbCapNhat.Checked = true;
                textBox1.Enabled = false;
      
                loaddata();
                tienNoKH();
            }
            else
            {
            
                loaddata();  
            }
            khoitao();
        }
        HoaDonBUS hdbus;
        HoaDonDTO hddto;
        KhachHangBUS khbus;
        KhachHangDTO khdto;
        ThamSoBUS tsBUS;
        ThamSoDTO thamsotdo;
        ChiTietHoaDonBUS ctbus;
        ChiTietHoaDonDTO ctdto;
        PhieuThuBUS phieuthuBUS;
        SachBUS sachbus;
        SachDTO sachdto;
        DataTable dtHK, dtHD, dtCT, dtSach, dtPhieuthu, dtTS;
        String tenkh;
        int idem, tien, r, tiendathu, tonghoadonKH, tongcong;
        void khoitao()
        {

            foreach (DataRow row in dtTS.Rows)
            {
                thamsotdo.SoLuongNhapToiThieu = int.Parse(row["SoluongNhapToiThieu"].ToString());
                thamsotdo.SoLuongTonQuyDinhNhap = int.Parse(row["SoLuongTonQuyDinhNhap"].ToString());
                thamsotdo.SoLuongTonQuyDinhSauKhiBan = int.Parse(row["SoLuongTonQuyDinhSauKhiBan"].ToString());
                thamsotdo.SoLuongTonQuyDinhTruocKhiBan = int.Parse(row["SoLuongTonQuyDinhTruocKhiBan"].ToString());
                thamsotdo.TienNoCuaKH = int.Parse(row["TienNoCuaKhachHang"].ToString());
                thamsotdo.TienNoQuyDinh = int.Parse(row["TienNoQuyDinh"].ToString());
                thamsotdo.TonToiDa = int.Parse(row["TonToiDa"].ToString());
                thamsotdo.SoLuongTon = int.Parse(row["SoLuongTon"].ToString());
            }
        }
        void gandulieu()
        {
            comboBox1.SelectedValue = ctdto.MaSach;
            numericUpDown1.Value = ctdto.SoLuong;
        }
        void tienNoKH()
        {
            tiendathu = 0;
            string filterExpression = "";
            if (hddto.MaHoaDon != 0)
            {
                filterExpression = "MaKhachHang=" + hddto.MaKhachHang + "";
            }
            else
                filterExpression = "TenKhachHang ='" + tenkh + "'";
            DataRow[] rows = dtHK.Select(filterExpression);
            if (rows.Length > 0)
            {
                dtPhieuthu = phieuthuBUS.LayTableTheoKH(int.Parse(rows[0].ItemArray[0].ToString()));
                foreach (DataRow row in dtPhieuthu.Rows)
                {
                    tiendathu += int.Parse(row["sotien"].ToString());
                }
                dtHD = hdbus.LayTableTHeoKhacHang(int.Parse(rows[0].ItemArray[0].ToString()));
                dtCT = ctbus.LayTableTheoHoaDon(hddto.MaHoaDon);


                tien = 0;
                idem = 0;
                foreach (DataRow row3 in dtHD.Rows)
                {
                    dtCT = ctbus.LayTableTheoHoaDon(int.Parse(row3["MaHoaDon"].ToString()));
                    foreach (DataRow row2 in dtCT.Rows)
                    {
                        filterExpression = "MaSach =" + row2["MaSach"].ToString();

                        DataRow[] rows1 = dtSach.Select(filterExpression);
                        tien = int.Parse(rows1[0].ItemArray[5].ToString()) * int.Parse(row2["slban"].ToString());
                        idem = idem + tien;
                    }
                }
                tonghoadonKH = tonghoadonKH + idem;
                tongcong = tonghoadonKH - tiendathu;
            }

        }
        void TongTien()
        {

            dtCT = ctbus.LayTableTheoHoaDon(hddto.MaHoaDon);
            dataGridView1.DataSource = dtCT;
            tien = 0;
            idem = 0;
            foreach (DataRow row in dtCT.Rows)
            {
                string filterExpression = "";

                filterExpression = "MaSach =" + row["MaSach"].ToString();

                DataRow[] rows = dtSach.Select(filterExpression);
                tien = int.Parse(rows[0].ItemArray[5].ToString()) * int.Parse(row["slban"].ToString());
                idem = idem + tien;

            }
            toolStripStatusLabel2.Text = idem.ToString();

        }
        void loaddata()
        {
            // load  text box
            dtSach = sachbus.laybang();
            AutoCompleteStringCollection auto = new AutoCompleteStringCollection();
            textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
            textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
            dtHK = khbus.LayTable();
            foreach (DataRow row in dtHK.Rows)
            {
                auto.Add(row["TenKhachHang"].ToString());
            }
            textBox1.AutoCompleteCustomSource = auto;
            //load data  chi tiet
            dtCT = ctbus.LayTableTheoHoaDon(hddto.MaHoaDon);
            dataGridView1.DataSource = dtCT;
            TongTien();
            //load combobox
            comboBox1.DataSource = dtSach;
            comboBox1.DisplayMember = "TenSach";
            comboBox1.ValueMember = "MaSach";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                int THEM;
               
                if (button2.Visible == true)
                {
                }
                else
                {
                    if (rbthem.Checked == true)
                    {

                        int soluong = 0;
                        ctdto.MaHoaDon = hddto.MaHoaDon;
                        ctdto.MaSach = int.Parse(comboBox1.SelectedValue.ToString());
                        ctdto.SoLuong = int.Parse(numericUpDown1.Value.ToString());
                        string filterExpression = "";
                        filterExpression = "MaSach =" + ctdto.MaSach;

                        DataRow[] rows = dtSach.Select(filterExpression);

                        soluong = int.Parse(rows[0].ItemArray[3].ToString()) - ctdto.SoLuong;
                        THEM = int.Parse(numericUpDown1.Value.ToString()) * int.Parse(rows[0].ItemArray[5].ToString());
                        
                        tongcong = tongcong + THEM;



                        if (int.Parse(rows[0].ItemArray[3].ToString()) <= thamsotdo.SoLuongTonQuyDinhTruocKhiBan)
                        {
                            MessageBox.Show("SỐ LƯỢNG SÁCH QUÁ ÍT /n SLL HIỆN TẠI LÀ : " + rows[0].ItemArray[3].ToString(), "THÔNG BÁO");
                            return;
                        }
                      

                        if (soluong <= thamsotdo.SoLuongTonQuyDinhSauKhiBan)
                        {
                            MessageBox.Show("SỐ LƯỢNG SÁCH SAU KHI BÁN QUÁ ÍT /n SLL SAU KHI BÁN LÀ : " + soluong.ToString(), "THÔNG BÁO");
                            return;
                        }
 
                        if (tongcong < thamsotdo.TienNoQuyDinh)
                        {
                            sachbus.suaSL(soluong, ctdto.MaSach);
                            ctbus.them(ctdto);
                            dtSach = sachbus.laybang();
                            TongTien();

                        }
                        else
                        {
                            tongcong = tongcong - THEM;
                            MessageBox.Show("KHÁCH HÀNG NÀY CÓ SỐ NỢ QUÁ QUY ĐỊNH XIN THANH TOÁN NỢ TRƯỚC \n NỢ HIỆN TẠI LÀ : " + tongcong, "THÔNG BÁO");
                        }
                    }
                    else
                    {

                        int soluong = 0;
                        ctdto.MaHoaDon = hddto.MaHoaDon;
                        ctdto.MaSach = int.Parse(comboBox1.SelectedValue.ToString());
                        ctdto.SoLuong = int.Parse(numericUpDown1.Value.ToString());
                        //ctbus.sua(ctdto); 

                        string filterExpression = "";
                        filterExpression = "MaSach =" + ctdto.MaSach;

                        DataRow[] rows = dtSach.Select(filterExpression);
                        soluong = int.Parse(rows[0].ItemArray[3].ToString()) + ctdto.SoLuong;
                        soluong = soluong - int.Parse(numericUpDown1.Value.ToString());
                        THEM = int.Parse(numericUpDown1.Value.ToString()) * int.Parse(rows[0].ItemArray[5].ToString());
                        tongcong = tongcong + THEM;

                        if (int.Parse(rows[0].ItemArray[3].ToString()) <= thamsotdo.SoLuongTonQuyDinhTruocKhiBan)
                        {
                            MessageBox.Show("SỐ LƯỢNG SÁCH QUÁ ÍT /n SLL HIỆN TẠI LÀ : " + rows[0].ItemArray[3].ToString(), "THÔNG BÁO");
                            return;
                        }


                        if (soluong <= thamsotdo.SoLuongTonQuyDinhSauKhiBan)
                        {
                            MessageBox.Show("SỐ LƯỢNG SÁCH SAU KHI BÁN QUÁ ÍT /n SLL SAU KHI BÁN LÀ : " + soluong.ToString(), "THÔNG BÁO");
                            return;
                        }
 

                        if (tongcong < thamsotdo.TienNoQuyDinh)
                        {
                            ctbus.them(ctdto);
                            sachbus.suaSL(soluong, ctdto.MaSach);
                            dtSach = sachbus.laybang();
                            TongTien();
                        }
                        else
                        {
                            tongcong = tongcong - THEM;
                            MessageBox.Show("KHÁCH HÀNG NÀY CÓ SỐ NỢ QUÁ QUY ĐỊNH XIN THANH TOÁN NỢ TRƯỚC \n NỢ HIỆN TẠI LÀ : " + tongcong, "THÔNG BÁO");
                        }
                    }
                }

            }

            catch (Exception)
            {
            }
        }
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {

            try
            {
                if (dataGridView1.Columns[e.ColumnIndex].GetType().ToString() == "System.Windows.Forms.DataGridViewButtonColumn")
                {

                    DialogResult result = MessageBox.Show("CÓ THỰC SỰ MUỐN XÓA KHÔNG", "THÔNG BÁO", MessageBoxButtons.YesNo);
                    if (result == DialogResult.Yes)
                    {
                        ctbus.xoa(ctdto);
                        MessageBox.Show("ĐÃ XÓA", "THÔNG BÁO");

                        int soluong = 0;

                        string filterExpression = "";

                        DataRow[] rows = dtSach.Select(filterExpression);
                        soluong = int.Parse(rows[0].ItemArray[3].ToString()) + ctdto.SoLuong;
                        tongcong = tongcong - ctdto.SoLuong * int.Parse(rows[0].ItemArray[5].ToString());
                        sachbus.suaSL(soluong, ctdto.MaSach);
                        dtCT = ctbus.LayTableTheoHoaDon(hddto.MaHoaDon);
                        dataGridView1.DataSource = dtCT;
                        dtSach = sachbus.laybang();
                        TongTien();
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("XÓA THẤT BẠI", "THÔNG BÁO");
            }
        }

        private void dataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                if (hddto.MaHoaDon != 0)
                {
                    r = this.dataGridView1.CurrentCell.RowIndex;
                    ctdto = new ChiTietHoaDonDTO();
                    ctdto.MaChiTietHoaDon = int.Parse(dataGridView1.Rows[r].Cells[0].Value.ToString());
                    ctdto.MaSach = int.Parse(dataGridView1.Rows[r].Cells[3].Value.ToString());
                    ctdto.SoLuong = int.Parse(dataGridView1.Rows[r].Cells[2].Value.ToString());
                    ctdto.MaHoaDon = int.Parse(dataGridView1.Rows[r].Cells[1].Value.ToString());
                    //MessageBox.Show(dataGridView1.Rows[r].Cells[0].Value.ToString() + "/" + dataGridView1.Rows[r].Cells[1].Value.ToString() + "/" + dataGridView1.Rows[r].Cells[2].Value.ToString() + "/" + dataGridView1.Rows[r].Cells[3].Value.ToString() + "/" + dataGridView1.Rows[r].Cells[4].Value.ToString() + dataGridView1.Rows[r].Cells[5].Value.ToString() + "/" + dataGridView1.Rows[r].Cells[6].Value.ToString() + "/" + dataGridView1.Rows[r].Cells[7].Value.ToString(), "");
                    gandulieu();
                }
            }
            catch (Exception)
            {
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                tenkh = textBox1.Text;
                tienNoKH();
                if (tongcong < thamsotdo.TienNoQuyDinh)
                {
                    
                    string filterExpression = "";
                    filterExpression = "TenKhachHang ='" + tenkh + "'";
                    DataRow[] rows = dtHK.Select(filterExpression);
                    hddto.MaKhachHang = int.Parse(rows[0].ItemArray[0].ToString());
                    hddto.NgayLap = dateTimePicker1.Value;
                    hdbus.them(hddto);

                    dtHD = hdbus.LayTableNguoc();
                    foreach (DataRow row in dtHD.Rows)
                    {
                        hddto.MaHoaDon = int.Parse(row["MaHoaDon"].ToString());
                        hddto.NgayLap = DateTime.Parse(row["NgayLap"].ToString());
                    }
                    MessageBox.Show("ĐÃ TẠO HÓA ĐƠN", "THÔNG BÁO");
                    button2.Visible = false;
                    
                }
                else
                    MessageBox.Show("KHÁCH HÀNG NÀY CÓ SỐ NỢ QUÁ QUY ĐỊNH XIN THANH TOÁN NỢ TRƯỚC \n NỢ HIỆN TẠI LÀ : " + tongcong, "THÔNG BÁO");
            }
            catch (Exception)
            {
                MessageBox.Show("CHƯA NHẬP  KHÁCH HÀNG", "THÔNG BÁO");
            }
        }




    }
}
